package org.dllwh.utils.google.response;

import okhttp3.Call;
import org.apache.poi.ss.formula.functions.T;
import org.dllwh.utils.google.request.AbsHttpRequest;
import org.dllwh.utils.google.response.handle.DataHandler;

/**
 * 把今天最好的表现当作明天最新的起点．．～
 * <p>
 * Today the best performance as tomorrow the newest starter!
 *
 * @ClassName ResultCallback
 * @Description 自定义一个接口回调 - 发送异步请求时可以实现这个接口
 * @Date 2025-06-11 10:17
 * @版本 V 1.0.1
 * @since JDK 17
 */
public interface ResultCallback {
    /**
     * 在请求前调用,在这里可以设置一些参数
     *
     * @param httpRequest 请求对象
     * @return 返回false则取消此次请求
     */
    boolean onBefore(AbsHttpRequest httpRequest);

    /**
     * 上传请求调用
     *
     * @param currentSize 当前上传的大小
     * @param totalSize   总的大小
     * @param progress    完成进度
     */
    void postProgress(final long currentSize, final long totalSize, final float progress);

    /**
     * 请求失败调用
     *
     * @param call      回调
     * @param exception 异常信息
     */
    void onFailure(Call call, Exception exception);

    /**
     * 请求完成调用
     *
     * @param response 原始的Response,方便调用者自行处理
     */
    void onComplete(okhttp3.Response response);

    /**
     * 接口正常调用则会触发该函数
     *
     * @param data 响应经过处理的数据
     */
    void onSuccessful(T data);

    /**
     * 获取数据处理器,用于解析转换响应结果
     */
    DataHandler<T> getDataHandler();
}
